
// var Matrix4 = function(opt_src) {
//     var i, s, d;
//     if (opt_src && typeof opt_src === 'object' && opt_src.hasOwnProperty('elements')) {
//       s = opt_src.elements;
//       d = new Float32Array(16);
//       for (i = 0; i < 16; ++i) {
//         d[i] = s[i];
//       }
//       this.elements = d;
//     } else {
//       this.elements = new Float32Array([1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]);
//     }
// };
// var Vec3 = function(x, y, x) {
//     return {x, y, z}
// };
function vecMulVec(v1, v2) {
    //len
    return [v1[0] * v2[0], v1[1] * v2[1], v1[2] * v2[2]];
}
// [
//     a, b, c,
//     d, e, f,
//     g, h, i
// ]
// [
//     a1, b1, c1,
//     d1, e1, f1,
//     g1, h1, i1
// ]
// [
//     x,
//     y,
//     z
// ]
// 矩阵右乘矢量
// 行*列
// [
//     x1 = ax + by + cz,
//     y1 = dx + ey + fz,
//     z1 = gx + hy + iz
// ]
function mat3MulVec3(m, v) {
    return [
        m[0] * v[0] + m[1] * v[1] + m[2] * v[2], 
        m[3] * v[0] + m[4] * v[1] + m[5] * v[2], 
        m[6] * v[0] + m[7] * v[1] + m[8] * v[2]
    ]
}
// 矢量左乘矩阵
// 行*行
// [
//     x1 = ax + dy + gz,
//     y1 = bx + ey + hz,
//     z1 = cx + fy + iz
// ]
function vec3MulMat3(v, m) {
    return [
        m[0] * v[0] + m[3] * v[1] + m[6] * v[2], 
        m[1] * v[0] + m[4] * v[1] + m[7] * v[2], 
        m[2] * v[0] + m[5] * v[1] + m[8] * v[2]
    ]
}
// [
//     a, b, c,
//     d, e, f,
//     g, h, i
// ]
// [
//     a1, b1, c1,
//     d1, e1, f1,
//     g1, h1, i1
// ]
// [
//     a * a1 + b * d1 + c * g1, a * b1 + b * e1 + c * h1, a * c1 +  b * f1 + c * i1,
//     d * a1 + e * d1 + f * g1, d * b1 + e * e1 + f * h1, a * c1 +  b * f1 + c * i1,
//     g * a1 + h * d1 + i * g1, g * b1 + h * e1 + i * h1, a * c1 +  b * f1 + c * i1
// ]
// 行*列
function matMulMat(m1, m2) {
    return [
        m2[0] * m1[0] + m2[3] * m1[1] + m2[6] * m1[2], m2[1] * m1[0] + m2[4] * m1[1] + m2[7] * m1[2], m2[2] * m1[0] + m2[5] * m1[1] + m2[8] * m1[2],
        m2[0] * m1[3] + m2[3] * m1[4] + m2[6] * m1[5], m2[1] * m1[3] + m2[4] * m1[4] + m2[7] * m1[5], m2[2] * m1[3] + m2[5] * m1[4] + m2[8] * m1[5],
        m2[0] * m1[6] + m2[3] * m1[7] + m2[6] * m1[8], m2[1] * m1[6] + m2[4] * m1[7] + m2[7] * m1[8], m2[2] * m1[6] + m2[5] * m1[7] + m2[8] * m1[8],
    ] 
}
console.log(vecMulVec([1, 2, 3], [1, 2, 3]))
let m = 
[1, 2, 3,
4, 5, 6,
7, 8, 9]
let v = [
    1,
    2,
    3
]
console.log(matMulMat(m, m))